clipboard: Implement gdk_clipboard_read()
authorBenjamin Otte <otte@redhat.com>
Mon, 20 Nov 2017 01:06:21 +0000 (02:06 +0100)
committerBenjamin Otte <otte@redhat.com>
Sun, 3 Dec 2017 04:43:24 +0000 (05:43 +0100)
gdk/gdkclipboard.c
gdk/gdkclipboard.h
gdk/gdkclipboardprivate.h
gdk/x11/gdkclipboard-x11.c

index 77862dd55b1e34dfb4ad48dd220024c4cfe2aa6f..eee9284a9a4365a4ff17a1ced8f5185a06ac7d79 100644 (file)
@@ -113,6 +113,14 @@ gdk_clipboard_finalize (GObject *object)
   G_OBJECT_CLASS (gdk_clipboard_parent_class)->finalize (object);
 }
 
+static GInputStream *
+gdk_clipboard_real_read (GdkClipboard *clipboard,
+                         const char   *mime_type)
+{
+  /* whoop whooop */
+  return g_memory_input_stream_new ();
+}
+
 static void
 gdk_clipboard_class_init (GdkClipboardClass *class)
 {
@@ -122,6 +130,8 @@ gdk_clipboard_class_init (GdkClipboardClass *class)
   object_class->set_property = gdk_clipboard_set_property;
   object_class->finalize = gdk_clipboard_finalize;
 
+  class->read = gdk_clipboard_real_read;
+
   /**
    * GdkClipboard:display:
    *
@@ -227,6 +237,19 @@ gdk_clipboard_get_formats (GdkClipboard *clipboard)
   return priv->formats;
 }
 
+GInputStream *
+gdk_clipboard_read (GdkClipboard *clipboard,
+                    const char   *mime_type)
+{
+  GdkClipboardPrivate *priv = gdk_clipboard_get_instance_private (clipboard);
+
+  g_return_val_if_fail (GDK_IS_CLIPBOARD (clipboard), NULL);
+  g_return_val_if_fail (mime_type != NULL, NULL);
+  g_return_val_if_fail (gdk_content_formats_contain_mime_type (priv->formats, mime_type), NULL);
+
+  return GDK_CLIPBOARD_GET_CLASS (clipboard)->read (clipboard, mime_type);
+}
+
 GdkClipboard *
 gdk_clipboard_new (GdkDisplay *display)
 {
index 08943e55e629ce76c601492139b59a337952cd41..6c36c940f92f2308b1698da50b326b251fe288f1 100644 (file)
@@ -42,6 +42,9 @@ GdkDisplay *            gdk_clipboard_get_display       (GdkClipboard          *
 GDK_AVAILABLE_IN_3_94
 GdkContentFormats *     gdk_clipboard_get_formats       (GdkClipboard          *clipboard);
 
+GDK_AVAILABLE_IN_3_94
+GInputStream *          gdk_clipboard_read              (GdkClipboard          *clipboard,
+                                                         const char            *mime_type);
 
 G_END_DECLS
 
index adc6c0ac025f0280d409bb1240e417788806d7ce..faf1ce61fc50772175677acd643d4d6bba63a40c 100644 (file)
@@ -38,9 +38,11 @@ struct _GdkClipboardClass
   GObjectClass parent_class;
 
   /* signals */
-  void          (* changed)          (GdkClipboard           *clipboard);
+  void                  (* changed)                             (GdkClipboard           *clipboard);
 
   /* vfuncs */
+  GInputStream *        (* read)                                (GdkClipboard           *clipboard,
+                                                                 const char             *mime_type);
 };
 
 GdkClipboard *          gdk_clipboard_new                       (GdkDisplay             *display);
index 28def4e674a370c1d9e9ddd4b2f0052926099ea8..b69200679315895f9eff1c3912748c1519295a48 100644 (file)
@@ -180,13 +180,27 @@ gdk_x11_clipboard_finalize (GObject *object)
   G_OBJECT_CLASS (gdk_x11_clipboard_parent_class)->finalize (object);
 }
 
+static GInputStream *
+gdk_x11_clipboard_read (GdkClipboard *clipboard,
+                        const char   *mime_type)
+{
+  GdkX11Clipboard *cb = GDK_X11_CLIPBOARD (clipboard);
+
+  return gdk_x11_selection_input_stream_new (gdk_clipboard_get_display (GDK_CLIPBOARD (cb)),
+                                             cb->selection,
+                                             mime_type,
+                                             cb->timestamp);
+}
+
 static void
 gdk_x11_clipboard_class_init (GdkX11ClipboardClass *class)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (class);
-  //GdkClipboardClass *clipboard_class = GDK_CLIPBOARD_CLASS (class);
+  GdkClipboardClass *clipboard_class = GDK_CLIPBOARD_CLASS (class);
 
   object_class->finalize = gdk_x11_clipboard_finalize;
+
+  clipboard_class->read = gdk_x11_clipboard_read;
 }
 
 static void